Quién dice...?

Este código permite saber quién de tus amigos tiene más probabilidad de decir una determinada frase o palabra.

Datos de entrenamiento: Los datos de entrenamiento utilizados han tenido un preprocesamiento adicional ya que han sido obtenidos en crudo de un chat de Whatsapp.

Los datos de entrada deben estar en dos columnas. Una haciendo referencia al emisor del mensaje y otra al mensaje en sí.

Modelo utilizado: Este modelo es mucho más eficiente en español ya que hace uso de un diccionario de StopsWords en español.

Mejora de los datos: Después de eliminar las StopsWords de los datos de entrada, vectoriza los mensajes y calcula los TFIDF.

Finalmente, con los datos mejorados, utiliza un clasificador Support Vector Machine (SVM) de la librería sklearn de python.

Importación de datos


In [103]:
import pandas as pd

df = pd.read_csv("Train_Data.csv", sep=',')
#df.head(10)
Emisor = list(df.iloc[:, 0])
Mensaje = list(df.iloc[:, 1])

In [107]:
from textar import TextClassifier #Importar librería. (primero debes haberla instalado con pip install textar)

tc = TextClassifier(
    texts= Mensaje,
    ids=map(str, range(3648))
)

# entrena un clasificador
tc.make_classifier(
    name="Who",
    ids=map(str, range(3648)),
    labels=Emisor
)

labels_considerados, puntajes = tc.classify(
    classifier_name="Who", 
    examples=[
        "Me voy a casar",
        "me compro una furgoneta"
    ]
)


# el primer ejemplo
print "La persona que diría Me voy a casar es: \n\n" 
print sorted(zip(labels_considerados, puntajes[0]), reverse=True)

print "\n\n"

# el segundo ejemplo
print "La persona que diría me compro una furgoneta es: \n\n", 
print sorted(zip(labels_considerados, puntajes[1]), reverse=True)


La persona que diría Me voy a casar es: 


[('\xe2\x80\xaa+49 1517 4113730\xe2\x80\xac', -1.9620533308345984), ('\xe2\x80\xaa+44 7843 718032\xe2\x80\xac', -1.1265644536172277), ('\xe2\x80\xaa+34 600 75 93 10\xe2\x80\xac', -1.4121884445563675), ('aron Susote', -1.5581558107640019), ('Tariq', -1.0484196923239393), ('Rubal Susote', -1.1676569650849744), ('Nico klaus/1', -0.68653891199756256), ('Nestor Suso', -1.2969490601074696), ('Lazaro', -1.2495080105780969), ('Klausio', -1.2937624324696362), ('Jos\xc3\xa9 Luis Delgado Davara', -1.3987629720147385), ('Jose Fly', -0.27261055473243312), ('Jonay', -0.52908659408653669), ('Dani Wallet', -1.4173806348833531), ('Adri\xc3\xa1n Grova', -0.88078396853411278), ('Aaron Susote', -1.1963985472473257), ('44 7843 718032\xe2\x80\xac', -1.1365614453871409), ('34 600 75 93 10\xe2\x80\xac', -1.4102575441342469), ('+49 1517 4113730\xe2\x80\xac', -0.84552027415617381), ('+44 7843 718032\xe2\x80\xac', -1.559486654083605), ('+34 600 75 93 10\xe2\x80\xac', -1.4815402966390967), ('#VALUE!', -1.1156857095022104)]



La persona que diría me compro una furgoneta es: 

[('\xe2\x80\xaa+49 1517 4113730\xe2\x80\xac', -1.6569834471313607), ('\xe2\x80\xaa+44 7843 718032\xe2\x80\xac', -1.1265644536172277), ('\xe2\x80\xaa+34 600 75 93 10\xe2\x80\xac', -1.2537714050249849), ('aron Susote', -1.3106203853126577), ('Tariq', -0.2736706376606971), ('Rubal Susote', -1.2562782488646096), ('Nico klaus/1', -1.0153839907856019), ('Nestor Suso', -1.1306007044118858), ('Lazaro', -1.167350986486368), ('Klausio', -1.295871831379404), ('Jos\xc3\xa9 Luis Delgado Davara', -1.1615493056753392), ('Jose Fly', -0.91556118233048933), ('Jonay', -0.89961564403071448), ('Dani Wallet', -1.1751274902004261), ('Adri\xc3\xa1n Grova', -0.98880233331511613), ('Aaron Susote', -1.2830934783414616), ('44 7843 718032\xe2\x80\xac', -1.0724272666162364), ('34 600 75 93 10\xe2\x80\xac', -1.4102575441342469), ('+49 1517 4113730\xe2\x80\xac', -1.1708860165000021), ('+44 7843 718032\xe2\x80\xac', -1.4207740019243613), ('+34 600 75 93 10\xe2\x80\xac', -1.3617174088957593), ('#VALUE!', -1.0468882994320725)]

In [ ]:


In [ ]: